//#include <iostream>
//#include <algorithm>
//#include <vector>
//using namespace std;
//
//int main() {
//    int n;
//    cin >> n;
//    vector<int> v(n + 1);
//    for (int i = 0; i < n; i++) {
//        cin >> v[i];
//    }
//    int left = 0;
//    int right = 0;
//    int sum = 0;
//    for (left = 0; left < n; left++) {
//        sum++;
//        while (right < n && v[left] == v[right]) {
//            right++;
//        }
//        if (right == n) {
//            break;
//        }
//        if (v[right] > v[left]) {
//            int left1 = right;
//            bool vis = false;
//            while (right < n && v[right] >= v[left1]) {
//                right++;
//                if (vis) {
//                    left1++;
//                }
//                vis = true;
//            }
//            left = left1;
//        }
//        else {
//            int left1 = right;
//            bool vis = false;
//            while (right < n && v[right] <= v[left1]) {
//                right++;
//                if (vis) {
//                    left1++;
//                }
//                vis = true;
//            }
//            left = left1;
//        }
//    }
//    cout << sum;
//    return 0;
//}

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int main() {
    int T;
    cin >> T;
    while (T--)
    {
        int H;
        cin >> H;
        int n = 1;
        int sum = 1;
        H -= 1;
        while (H) {
            if (H % (2 * n) == 0) {
                H -= (2 * n);
                n *= 2;
                sum++;
            }
            else {
                H -= n;
                sum++;
            }
        }
        cout << sum << endl;
    }
    return 0;
}


//class Solution {
//public:
//    /**
//     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
//     *
//     * 该数组最长严格上升子序列的长度
//     * @param a int整型vector 给定的数组
//     * @return int整型
//     */
//    int dp[100100] = { 0 };
//    int pos = 0;
//    int LIS(vector<int>& a) {
//        for (auto x : a)
//        {
//            if (pos == 0 || x > dp[pos])
//            {
//                dp[++pos] = x;
//            }
//            else {
//                int l = 1;
//                int r = pos;
//                while (l < r)
//                {
//                    int mid = (l + r) / 2;
//                    if (dp[mid] > x)
//                    {
//                        r = mid;
//                    }
//                    else {
//                        l = mid + 1;
//                    }
//                }
//                dp[l] = x;
//            }
//        }
//        return pos;
//    }
//};